class Solution {
    public void duplicateZeros(int[] arr) {
        //1. 先找到复写的最后一个位置.
        int cur = 0, dest = 0;
        int n = arr.length;
        while (dest < arr.length-1) {
            if (arr[cur] == 0) {
                dest += 2;
                cur ++;
                continue;
            }
            dest++;
            cur++;
        }

        //2. 处理一下特殊情况, 如果进行完第1步之后 dest指向了n位置(null)
        if (dest == n) {
            arr[n-1] = 0;
            dest -= 2;
            cur --;
        }

        //3.从后往前进行复写
        while (cur >= 0) {
            if (arr[cur] == 0) {
                if (dest == 0) {
                    arr[dest] = 0;
                    dest --;
                    cur --;
                }
                arr[dest] = 0;
                arr[dest-1] = 0;
                dest -= 2;
                cur --;
                continue;
            }
            arr[dest] = arr[cur];
            dest--;
            cur--;
        }
    }
}